﻿package reglas.movimiento {
	
	import reglas.entidades.*;
	
	import reglas.*;
	
	public class AdmMovimiento implements IEntidadObserver
	{
		
		private var entidadControlada:EntidadControladaMovimiento;
		
		
		public function AdmMovimiento(unaEntidad:EntidadControladaMovimiento)
		{
			entidadControlada = unaEntidad;
		}
		
		public function animar()
		{
			if (Math.random()<0.1)
			{
				movIzq();
			}
			else
			{
				movDer();
			}
		}
		
		public function movIzq()
		{
			entidadControlada.updateEstado1(EntidadControladaMovimiento.ESTADO_MOV_GIRO_IZQ);
		}
		
		public function movDer()
		{
			entidadControlada.updateEstado1(EntidadControladaMovimiento.ESTADO_MOV_GIRO_DER);
		}
		
		public function movUp()
		{
			entidadControlada.updateEstado1(EntidadControladaMovimiento.ESTADO_MOV_ACELERAR);
		}
		
		public function movDown()
		{
			entidadControlada.updateEstado1(EntidadControladaMovimiento.ESTADO_MOV_DESACELERAR);
		}
		
		public function movUpIzq()
		{
			entidadControlada.updateEstado1(EntidadControladaMovimiento.ESTADO_MOV_UP_IZQ);
		}
		
		public function movUpDer()
		{
			entidadControlada.updateEstado1(EntidadControladaMovimiento.ESTADO_MOV_UP_DER);
		}
		
		public function movDownIzq()
		{
			entidadControlada.updateEstado1(EntidadControladaMovimiento.ESTADO_MOV_DOWN_IZQ);
		}
		
		public function movDownDer()
		{
			entidadControlada.updateEstado1(EntidadControladaMovimiento.ESTADO_MOV_DOWN_DER);
		}
		
		public function movIdle()
		{
			entidadControlada.updateEstado1(EntidadControladaMovimiento.ESTADO_MOV_IDLE);
		}
		
		
		
		public function update (nuevoEstado:int, posX:Number, posY:Number, vx:Number, vy:Number)
		{
			if (nuevoEstado==EntidadControladaMovimiento.ESTADO_DESTROY)
			{
				destroy();
				return;
			}
		}
		
		public function destroy()
		{
			Universo.getInstancia().destroyAdmMovimiento(this);			
		}
		
	}
	
}